package ShenBlueInc.Sql;

import java.sql.*;

public class SqlConnect {
	// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost:3306/dark_blue";
 
    // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
    //static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
    //static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
 
    // 数据库的用户名与密码，需要根据自己的设置
    static final String USER = "dark_blue";
    static final String PASS = "123456";
    PreparedStatement stmt;
    int i = 0;//提前预定义循环初始值
    /**
     * 数据库链接字段
     * @return Connection
     */
    public Connection Conn() {
    	Connection conn=null;
    	try {
    		Class.forName(JDBC_DRIVER);
			conn=DriverManager.getConnection(DB_URL,USER,PASS);
			
		} catch (SQLException | ClassNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
    	
    	return conn;
    }
    /**
     * 提交sql语句返回所有查询行的数据集合
     * @param sql
     * @param args
     * @return ResultSet
     */
    public ResultSet Items(String sql,String... s) {
    	ResultSet rs=null;
    	try {
    		 stmt=Conn().prepareStatement(sql);
    		 i=0;
			for(;i<s.length;i++) {
				stmt.setString(i+1, s[i]);
			}
			System.out.println("当前为Items方法打印值："+stmt.toString());
			rs=stmt.executeQuery();
			
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
    	return rs;
    }
    /**
     * 查询单行数据的方法
     * @param sql
     * @param s
     * @return object[]
     */
    public Object[] RowItem(String sql,String... s) {
    	
    	try {
    		 stmt=Conn().prepareStatement(sql);
    		 i=0;
			for(;i<s.length;i++) {
				System.out.println(s[i]);
				stmt.setString(i+1, s[i]);
			}
			System.out.println("当前为RowItem方法打印值："+stmt.toString());
			ResultSet rs=stmt.executeQuery();
			if(rs.next()) {
				int size=rs.getMetaData().getColumnCount();
				Object[] objarr=new Object[size];
				i = 0;
				for(;i<size;i++) {
					objarr[i]=rs.getObject(i+1);
				}
				closr();
				return objarr;
			}
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
    	return null;
    }
    /**
     * 增删改查使用的方法
     * @param sql
     * @param args
     * return count
     */
    public int DelUpInsert(String sql,String... s) {
    	int count=0;
    	try {
    		 stmt=Conn().prepareStatement(sql);
    		 i=0;
			for(;i<s.length;i++) {
				stmt.setString(i+1, s[i]);
			}
			System.out.println("当前为DelUp方法打印值："+stmt.toString());
			count=stmt.executeUpdate();
			closr();
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
    	return count;
    }
    /**
     * 只返回一行一列的方法
     * @param sql
     * @param args
     * @return object
     */
    public Object OneItem(String sql,String... s) {
    	Object obj=null;
    	try {
    		stmt=Conn().prepareStatement(sql);
    		i=0;
			for(;i<s.length;i++) {
				stmt.setString(i+1, s[i]);
			}
			System.out.println("当前为OneItem方法打印值："+stmt.toString());
			ResultSet rs=stmt.executeQuery();
			if(rs.next()) {
				obj=rs.getObject(1);
			}
			closr();
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
    	
    	return obj;
    }
    
    public void closr() throws SQLException {
    	this.stmt.close();
    	this.Conn().close();
    }
    public static void main(String[] args) {
    	/*SqlConnect conn=new SqlConnect();
    	String sql="insert into User(User_telephone,User_name) values(?,?)";
    	conn.DelUpInsert(sql, "admin","123");*/
	}
}
